Site cover image

Site icon imageSen(Qian)’s Memo

This website is Donglin Qian (Torin Sen)’s memo, especially about machine learning papers and competitive programming.

2021-NIPS-[TEDn]Mixture Proportion Estimation and PU Learning: A Modern Approach

https://arxiv.org/abs/2111.00980

Introduction

人間は類似したものから種類は不明だが、似ているものを発見できる。これはkkクラスのデータで学習し、k+1k+1クラスのデータを分類させるという問題=MPEにあたる。

この点から考えると、k=1k=1とすればPU Learningといえる。

伝統的には、混合分布推定とは大量にUがある状態で、どのようなクラスタがありその分布とは何かを推定するもの。混合分布推定は高次元データにおいてはうまく働かず、PUについても同様な問題がある(データセット固有のものだけに性能が良いなど)

この論文では、Best Bin Estimation(BBE)というMPEで使われる有効なテクニックを応用し、Conditional Value Ignoring Risk(CVIR)について学習する。

この研究では高次元では使えないということで、何かしらの強い識別器の内部状態のベクトルを用いることでラベルシフトで使われるBBEの手法を使えるようにした

Related Works

PUにおける混合比では、完全にPとUが分離されていなければ理論的にはClass Priorを推定できると理論的にわかるが、そうでない場合はいろいろな仮定を設けないと本質的には推定できないとわかっている。

絶対に収束するとわかっている手法として以下のものがあるが、理論上であり実際は収束が非常に遅いことがある。

G. Blanchard, G. Lee, and C. Scott. Semi-supervised novelty detection. The Journal of Machine Learning Research, 11:2973–3009, 2010.

これについて、より早い収束ができるMPEアルゴリズムを提案されているが、高次元データでは性能が低いし大規模データセットにも弱い。

H. Ramaswamy, C. Scott, and A. Tewari. Mixture proportion estimation via kernel embeddings of distributions. In International conference on machine learning, pages 2052–2060, 2016.

似てる手法では、決定木を用いて入力空間内のサブドメインがあるが、これも高次元データに弱い。

J. Bekker and J. Davis. Estimating the class prior in positive and unlabeled data through decision tree induction. In Proceedings of the AAAI Conference on Artificial Intelligence, 2018.

Class Priorを推定するためにいったんPU識別器を訓練し、それから推定するというのもある(鶏先卵先問題)いずれも理論的保証がなかったり不安定だったり。

問題設定

PU Learning

  • ベクトルv\mathbf{v}について、vi\mathbf{v}_iii番目の成分だとする。
  • データはxXRd\mathbf{x} \in X \subseteq \mathbb{R}^dである。
  • Ground TruthのラベルはY={1,+1}Y = \{-1, +1 \}である。
  • Uデータは、Class Priorのπ=Pr(y=+1)\pi = Pr(y=+1)を用いて、pu(x)=πpp(x)+(1π)pn(x)p_u(\mathbf{x}) = \pi p_p(\mathbf{x}) + (1 - \pi) p_n(\mathbf{x})にとって構成されている。

MPEについて

MPEとは、Class Priorのπ\piを推定する問題である。pp,pn,pup_p, p_n, p_uについて特段の条件がない限り、これはBlanchardにより一意には定まらないとわかっている。

Mixture Proportion Estimation

導入したBBEという手法について説明する。

まず、ある固定されたPUデータで学習した識別器ffがあり、その内部状態のベクトルを状態として使う。

次に、ffで確信をもってPであると判断するようなデータの割合を探す。理論的には以下のようになるが、実際は経験的に確信度が高いPのデータを選ぶかたちである

q(z)=Azp(x)dxAz={xX:f(x)z}q(z) = \int_{A_z} p(x) dx \\ A_z = \{ x \in X: f(x) \geq z \}

BBEという手法は、Class Priorは、以下のように推定する。これは真のClass Priorに収束する。

それぞれ、pup_uの分布において、あるcc以上の信頼度(Pっぽい)のデータの割合と。ppp_pの分布においてのcc以上の信頼度のデータの割合の比である。この比を最小化できるようなccを選べば、それがClass Priorになるという理屈。

理由として、ほぼほぼPであるとわかっているような領域(ここでは識別器が閾値ccを超える)において、Uの中でこれを満たすデータはPと扱うことで、その割合がClass Priorとほぼ等しいと考えられる

この時、分母のqp(c)1q_p(c) \approx 1になるが、これを1とは固定しない。なぜなら、使っているPUデータの識別器ffについて過学習したPのみ取り込んでしまい、本来のPの分布は得られないとわかる

比率の最小値をとるのは以下の原因から。高すぎるccではffにOverfitした領域のみ着目されて、そこにあてはまるPのデータは本来よりは少なくなる(その結果分母が小さくなり比率が大きくなる)。低すぎるccではそもそも領域がPの分布よりも広く、本来よりも多くのU内のサンプルをPと判定してしまい、比率が大きくなるから

α=minc[0,1]qu(c)/qp(c)\alpha^* = \min_{c \in [0, 1]} q_u(c) / q_p(c)

これは一般的なBest Bin Estimation(BBE)の考え方である。

Class Priorの推定のアルゴリズム

  1. あるz[0,1]z \in [0, 1]を与えられたら、経験的にq^u(z),q^p(z)\hat{q}_u(z), \hat{q}_p(z)を推定できる。
  2. 以下の式を最小化するようなc^=c\hat{c} = cである。
    1. 以下の式は凸関数なので、optimizerで最適な値を得られるとわかっている。
    2. ハイパーパラメタとして、0<δ,1<γ0 < \delta, 1 < \gamma とする。
c^=arg minc[0,1]{q^u(c)q^p(c)+1+γq^p(c)(log(4/δ)2nu+log(4/δ)2np)}\hat{c} = \argmin_{c \in [0, 1]} \{ \frac{\hat{q}_u(c)}{\hat{q}_p(c)} + \frac{1 + \gamma}{\hat{q}_p(c)}(\sqrt{\frac{\log (4 / \delta)}{2 n_u}} + \sqrt{\frac{\log (4 / \delta)}{2 n_p}}) \}

本来ならば1項目だけだが、後半の部分は理論的なリスク上界関係の式である。小さい正の定数γ\gammaにしている(0.001とか)。

推定の詳細はAppendixにある。必要ならまた読みに戻る。

PU Learningアルゴリズムについて

nnPUから、Uの中からPをほぼ見つけられれば実質的にPNになるので、学びやすくなるだろう。これは、以下のself-supervised learningベースの手法=CVIRになる。

最初はPU Learning(nnPUなど)でwarm upして、次にCVIRで学習する。

CVIR

具体的に記述すると以下のようになる。これがConditional Value Ignoring Risk(CVIR)

  1. Training Dataの損失が収束するまで以下のループを回す。
    1. Uの中のすべてのデータについて、Unbiased EstimatorのU部分のRiskの式l(f(x),1)l(f(\mathbf{x}), -1)を計算し、その中で損失が低い順から1π1 - \piの割合のデータをXnX_nと置いて、他をXpX_pにする。(Pseudo Label付与)
    2. Xp,XnX_p, X_nについてシャッフルして、Minibatch学習を行う。
      1. Minibatch(Xpi,Xni)(X_p^i, X_n^i)が得られる。
      2. これについて、PN LearningのようにClass Priorπ\piを用いて学習をする。
  2. これで学習したモデルがPU Learningの学習器。

これ、Self-supervised系あるあるのミスラベルの影響が積み重なるのやっぱかなりあるじゃないか…?

(TED)n: CVIRとBBEの統合

Transform Estimate Discardという統合したものを提案した。

  1. PUデータをそれぞれ2つに分割する。(Xp1,Xu1),(Xp2,Xu2)(X_p^1, X_u^1),(X_p^2, X_u^2)である。
  2. まず、Xn1:=Xu1X_n^1 := X_u^1として、PN Learningを行う。
    1. ミニバッチで学習し、目標関数は以下のようなもの。
    2. ここで重みが消えているが、どうやら分類可能である限り重みは重要ではないという先行研究があるらしい。
    EP[l(f(x),+1)]+EN[l(f(x),1)]\mathbb{E}_P[l(f(\mathbf{x}), +1)] + \mathbb{E}_N[l(f(\mathbf{x}), -1)]
  3. 次に、PositiveをNegativeに分類する率と仮のNegativeをPositiveに分類してしまう率について、その総和が一定以下(つまり収束する)になるまでループを回す。
    1. Class Priorのπ\piをBBEで推定する。
    2. CVIRのアルゴリズムで訓練する。

つまり、まずはPN LearningでWard upしてから、Class Priorの推定→CVIR(Self-supervised Learningベース)で訓練ということ。

Experiments

CIFAR-10やMNISTを使用。Class Priorは0.5としている(CIFAR-10は犬vs猫)。ネットワーク構造はMLPやResNet18です。